<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>HDFS原理分析—— 基本概念 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>HDFS原理分析—— 基本概念</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Hadoop/">Hadoop</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HDFS是Hadoop Distribute File System 的简称，也就是Hadoop的一个分布式文件系统。</p>
<h2 id="一、HDFS的主要设计理念"><a href="#一、HDFS的主要设计理念" class="headerlink" title="一、HDFS的主要设计理念"></a>一、HDFS的主要设计理念</h2><h3 id="1、存储超大文件"><a href="#1、存储超大文件" class="headerlink" title="1、存储超大文件"></a>1、存储超大文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这里的“超大文件”是指几百MB、GB甚至TB级别的文件。</p>
<h3 id="2、最高效的访问模式是-一次写入、多次读取-流式数据访问"><a href="#2、最高效的访问模式是-一次写入、多次读取-流式数据访问" class="headerlink" title="2、最高效的访问模式是 一次写入、多次读取(流式数据访问)"></a>2、最高效的访问模式是 一次写入、多次读取(流式数据访问)</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HDFS存储的数据集作为hadoop的分析对象。在数据集生成后，长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据，因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。</p>
<h3 id="3、运行在普通廉价的服务器上"><a href="#3、运行在普通廉价的服务器上" class="headerlink" title="3、运行在普通廉价的服务器上"></a>3、运行在普通廉价的服务器上</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HDFS设计理念之一就是让它能运行在普通的硬件之上，即便硬件出现故障，也可以通过容错策略来保证数据的高可用。</p>
<h2 id="二、HDFS的忌讳"><a href="#二、HDFS的忌讳" class="headerlink" title="二、HDFS的忌讳"></a>二、HDFS的忌讳</h2><h3 id="1、将HDFS用于对数据访问要求低延迟的场景"><a href="#1、将HDFS用于对数据访问要求低延迟的场景" class="headerlink" title="1、将HDFS用于对数据访问要求低延迟的场景"></a>1、将HDFS用于对数据访问要求低延迟的场景</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;由于HDFS是为高数据吞吐量应用而设计的，必然以高延迟为代价。</p>
<h3 id="2、存储大量小文件"><a href="#2、存储大量小文件" class="headerlink" title="2、存储大量小文件"></a>2、存储大量小文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HDFS中元数据（文件的基本信息）存储在namenode的内存中，而namenode为单点，小文件数量大到一定程度，namenode内存就吃不消了。</p>
<h2 id="三、HDFS基本概念"><a href="#三、HDFS基本概念" class="headerlink" title="三、HDFS基本概念"></a>三、HDFS基本概念</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据块（block）：大文件会被分割成多个block进行存储，block大小默认为64MB。每一个block会在多个datanode上存储多份副本，默认是3份。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;namenode：namenode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;datanode：datanode就负责存储了，当然大部分容错机制都是在datanode上实现的。</p>
<h2 id="四、HDFS基本架构图"><a href="#四、HDFS基本架构图" class="headerlink" title="四、HDFS基本架构图"></a>四、HDFS基本架构图</h2><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/HDFS%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90%E2%80%94%E2%80%94%20%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5/01.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;图中有几个概念需要介绍一下</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rack 是指机柜的意思，一个block的三个副本通常会保存到两个或者两个以上的机柜中（当然是机柜中的服务器），这样做的目的是做防灾容错，因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是蛮高的。</p>
<h2 id="五、HDFS写文件流程"><a href="#五、HDFS写文件流程" class="headerlink" title="五、HDFS写文件流程"></a>五、HDFS写文件流程</h2><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/HDFS%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90%E2%80%94%E2%80%94%20%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5/02.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;思考：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在datanode执行create file后，namenode采用什么策略给client分配datanode？</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;顺序写入三个datanode，写入过程中有一个datanode挂掉了，如何容错？</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;client往datanode写入数据时挂掉了，怎么容错？</p>
<h2 id="六、HDFS读文件流程"><a href="#六、HDFS读文件流程" class="headerlink" title="六、HDFS读文件流程"></a>六、HDFS读文件流程</h2><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/HDFS%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90%E2%80%94%E2%80%94%20%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5/03.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;思考：namenode挂掉了怎么办，这个时候HDFS是否有相应的容错方案。</p>

	

	
		<span class="different-posts"><a href="/2017/10/12/Hadoop/6. HDFS原理分析—— 基本概念/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
